/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package OtrosTPs.TP1;

import java.util.ArrayList;

/**
 * @deprecated No funciona para todos los casos
 * @author ivanpianetti
 */
public class LevenshteinPiane {

    private static int distancia = 0;

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        ArrayList<String> cadenas = new ArrayList<String>();
//        cadenas.add("Amparo");
//        cadenas.add("Leopoldo");
//        cadenas.add("Nicolas");
//        cadenas.add("David");
//        cadenas.add("Adrian");
//        cadenas.add("Juliana");
//        cadenas.add("Virginia");
//        cadenas.add("Leonidas");
//        cadenas.add("Lucio");
        ////////////////
        cadenas.add("Ana");
//        cadenas.add("Francisco");
//        cadenas.add("Belen");
        cadenas.add("Zulma");
//        cadenas.add("Pedro");
//        cadenas.add("Esteban");
        cadenas.add("Amy");
//        cadenas.add("Paula");
//        cadenas.add("Claudia");
        cadenas.add("Anama");
//        cadenas.add("Jorge");
//        cadenas.add("Estanislao");
//        cadenas.add("Cristian");
//        cadenas.add("Adrian");
        cadenas.add("Clara");
//        cadenas.add("Fernando");
        cadenas.add("Alan");
//        cadenas.add("Charlize");
//        cadenas.add("Cameron");
        cadenas.add("Anahi");
//        for (int i = 0; i < cadenas.size() - 1; i++) {
        String c1 = cadenas.get(0);
        System.out.println("=> " + c1);
        for (int t = 0 + 1; t < cadenas.size(); t++) {
            String c2 = cadenas.get(t);
            System.out.println("        " + c2 + " = " + calcDistLevenshtein(c1, c2));
            distancia = 0;
        }
//        }
//=> Amparo
//        Leopoldo = 6
//        Nicolas = 7
//        David = 6
//        Adrian = 5
//        Juliana = 6
//        Virginia = 8
//        Leonidas = 8
//        Lucio = 5
//=> Leopoldo
//        Nicolas = 6
//        David = 7
//        Adrian = 8
//        Juliana = 8
//        Virginia = 8
//        Leonidas = 5
//        Lucio = 6

    }

    private static int calcDistLevenshtein(String c1, String c2) {
        if (c1.equalsIgnoreCase(c2)) {
            return 0;
        }
        if (c1.equalsIgnoreCase("") || c2.equalsIgnoreCase("")) {
            distancia = distancia + c1.length() + c2.length();
        } else {
            char primerChar = c1.toCharArray()[0];
            int pos = getPosicion(primerChar, c2);
            if (pos >= 0) {
                String sub1 = c1.substring(c1.indexOf(primerChar) + 1, c1.length());
                String sub2 = c2.substring(c2.indexOf(primerChar) + 1, c2.length());
                distancia = pos + calcDistLevenshtein(sub1, sub2);
            }
            if (pos == -1) {
                primerChar = c2.toCharArray()[0];
                if (!existe(primerChar, c1)) {
                    String sub1 = c1.substring(1);
                    String sub2 = c2.substring(1);
                    distancia = 1 + calcDistLevenshtein(sub1, sub2);
                } else {
                    pos = getPosicion(primerChar, c1);
                    String sub1 = c1.substring(c1.indexOf(primerChar) + 1, c1.length());
                    String sub2 = c2.substring(c2.indexOf(primerChar) + 1, c2.length());
                    distancia = pos + calcDistLevenshtein(sub1, sub2);
                }
            }
        }
//        if (distancia > c1.length() || distancia > c2.length()) {
//            int[] tamanios = {c1.length(), c2.length()};
//            Arrays.sort(tamanios);
//            distancia = tamanios[tamanios.length - 1];
//        }
//        if (distancia > c1.length()) {
//            distancia = c1.length();
//        }
        return distancia;
    }

    private static int getPosicion(char primerChar, String c) {
        for (int i = 0; i < c.length(); i++) {
            char letra = c.toCharArray()[i];
            if (letra == primerChar) {
                return i;
            }
        }
        return -1;
    }

    private static boolean existe(char primerChar, String c) {
        for (int i = 0; i < c.length(); i++) {
            String letra = c.toCharArray()[i] + "";
            if (letra.equalsIgnoreCase(primerChar + "")) {
                return true;
            }
        }
        return false;
    }
}
